Sélectionnez un profil pour adapter la présentation.
Au départ, non. Il n'y a que ce qui a été décrit : un moteur automate qui répète inlassablement les mêmes actions, une mémoire, 5 variables externalisées (ou registres), une instruction unique de copie en double indirection. Mais on peut tout reconstruire à partir de cela.
Soit donc le GOTO du basic. Le branchement est simplement obtenu en pointant le pointeur d'exécution à une autre adresse :
Exécuter Destinationdusaut
Pour afficher un caractère ou une adresse à l'écran (le contenu d'une variable), il suffit de copier sur la variable de sortie
Dire Variable
ou
Voir Variable
selon le nom qu'on a choisi pour externaliser le registre de sortie.
Par construction, le driver de sortie affichera un caractère à la place de l'adresse si la valeur est inférieure à 256
(mais on peut modifier le driver de sortie pour afficher tous les caractères UTF-8), ce qui est fait dans l'interface en ligne.
...ou comment se prendre la tête !
Problème : avec la double indirection qui saute un étage de pointeur, comment récupérer la première adresse vers laquelle pointe une adresse ?
Les cases mémoire étant repérées par d'autres adresses mémoires avec un étage d'indirection supplémentaire, il faut effectivement penser à conserver l'adresse d'un atome nommé avant de lui affecter
une valeur. Sinon il ne sera pas simplement adressable. On pourrait le retrouver dans le dictionnaire des mots connus, mais c'est' compliqué.
Il faut donc créer un pointeur vers l'atome et un pointeur vers ce pointeur (oui, double indirection oblige).
C'est pourquoi vous verrez souvent, au moins avant que la fonction Déclarer ne soit définie, des créations de variables de la forme :
Créer Variable<
Variable<< Variable< Variable< Variable
(les signes < désignent les étages de pointeurs, voir conventions)
Tête< Variable
permet de récupérer à l'adresse de Tête la valeur pointée par Variable. Cela revient à déterminer la "valeur" de la Variable.
Ah ! Là on tient un argument pour démontrer que PLUSHIE ne peut pas marcher ! Sans test, pas d'algorithme complexe !
Et pourtant... On peut effectuer un saut conditionnel en utilisant uniquement la copie d'adresses mémoire :
En PLUSHIE, le test prendra la forme suivante :Si Valeur1 Égale Valeur2 Alors Procédurea Sinon Procédureb Exécuter TestIl suffit de copier Procédureb sur l'adresse pointée par Si, puis copier Procédurea sur celle pointée par Égale, puis d'exécuter la valeur pointée par Si.
Tête< Si Sauvegardesi Tête
Tête Sinon
Tête< Égale Sauvegardeégale Tête
Tête Alors
Tête< Si Identique Tête
Tête< Si Tête Sauvegardesi
Tête< Égale Tête Sauvegardeégale
Exécuter Identique
permet de contourner le problème.
Bien entendu, il n'est pas question de réécrire tout ce code à chaque test. Le fichier ini.txt propose ainsi une fonction testidentique dont la syntaxe est :
Si Valeur1 Égale Valeur2 Alors Procédurea Sinon ProcédurebExécuter Testidentique
Suitede Variable Tete< Suite
Tete contient alors la seconde valeur pointée par Variable (sa suite). Le registre pointé par Suite contient toujours (grâce au fonctionnement du moteur automate de niveau -1) l'adresse de la seconde adresse mémoire
pointée par la valeur entrée dans Suitede (en pratique c'est juste adresse+1).
Tantque Nombre Répéter Procédure Retourboucle Findeboucle Retourprocédure Boucle Exécuter Boucle
Et puis, en utilisant les fonctions qu'il connaît, il peut bâtir des fonctions plus avancées.